const puppeteer = require("puppeteer");
const fs = require("fs");

(async () => {
  // 1. 打开浏览器
  const browser = await puppeteer.launch({
    // 无头模式：（是否显示浏览器界面）
    headless: false,
  });
  // 2. 新建标签页
  const page = await browser.newPage();

  let result = [];

  for (let i = 0; i < 10; i++) {
    // 3. 输入网址并完成跳转
    await page.goto(`https://movie.douban.com/top250?start=${25 * i}&filter=`, {
      waitUntil: "load",
    });
    // 4. 爬取数据
    const res = await page.evaluate(() => {
      const arr = [];
      // 这个函数，就是在浏览器页面执行的
      const $lis = $(".grid_view li");

      for (let i = 0; i < $lis.length; i++) {
        const $li = $($lis[i]);

        const cover = $li.find("img").attr("src");
        let id = $li.find("a").attr("href").split("/").filter(Boolean);
        id = id[id.length - 1];
        const title = $li.find(".title").text();

        arr.push({
          id,
          cover,
          title,
        });
      }

      return arr;
    });

    result = [...result, ...res];
  }

  fs.writeFileSync("data.json", JSON.stringify(result));
  // 5. 关闭浏览器
  await browser.close();
})();
